'use strict';

var warn = function warn(msg, getValue) {
    console.warn(msg);
};

Component({
    externalClasses: ['cell-class'],
    options: {
        multipleSlots: true
    },
    relations: {
        '../cell-group/index': {
            type: 'parent'
        }
    },
    properties: {
        title: {
            type: String,
            description: '左侧标题'
        },
        label: {
            type: String,
            description: '标题下方的描述信息'
        },
        value: {
            type: String,
            description: '右侧内容'
        },
        onlyTapFooter: {
            type: Boolean,
            description: '只有点击 footer 区域才触发 tab 事件'
        },
        isLink: {
            type: null,
            value: '',
            description: '是否展示右侧箭头并开启尝试以 url 跳转'
        },
        linkType: {
            type: String,
            value: 'navigateTo',
            description: '链接类型，可选值为 navigateTo，redirectTo，switchTab，reLaunch'
        },
        url: {
            type: String,
            value: ''
        }
    },
    data: {
        isLastCell: true
    },
    methods: {
        footerTap: function footerTap() {
            // 如果并没有设置只点击 footer 生效，那就不需要额外处理。cell 上有事件会自动处理
            if (!this.data.onlyTapFooter) {
                return;
            }

            this.triggerEvent('tap', {});
            doNavigate.call(this);
        },
        cellTap: function cellTap() {
            // 如果只点击 footer 生效，那就不需要在 cell 根节点上处理
            if (this.data.onlyTapFooter) {
                return;
            }

            this.triggerEvent('tap', {});
            doNavigate.call(this);
        },


        // 用于被 cell-group 更新，标志是否是最后一个 cell
        updateIsLastCell: function updateIsLastCell(isLastCell) {
            this.setData({ isLastCell: isLastCell });
        }
    }
});

// 处理跳转
function doNavigate() {
    var _data$url = this.data.url,
        url = _data$url === undefined ? '' : _data$url;

    var type = typeof this.data.isLink;

    if (!this.data.isLink || !url || url === 'true' || url === 'false') return;

    if (type !== 'boolean' && type !== 'string') {
        warn('isLink 属性值必须是一个字符串或布尔值', this.data.isLink);
        return;
    }

    if (['navigateTo', 'redirectTo', 'switchTab', 'reLaunch'].indexOf(this.data.linkType) === -1) {
        warn('linkType 属性可选值为 navigateTo，redirectTo，switchTab，reLaunch', this.data.linkType);
        return;
    }
    wx[this.data.linkType].call(wx, { url: url });
}